import { CenoResponse } from "./response"

export type CenoPromise<T = unknown> = {
    /**
     将响应正文作为 `ArrayBuffer` 获取。
     */
    arrayBuffer: () => Promise<ArrayBuffer>

    /**
     将响应正文作为 `Blob` 获取。
     */
    blob: () => Promise<Blob>

    /**
     将响应正文作为 `FormData` 获取。
     */
    formData: () => Promise<FormData>

    /**
     将响应正文作为 JSON 获取。

     @example
     ```
     import ceno from 'ceno';

     const json = await ceno(...).json();
     ```

     @example
     ```
     import ceno from 'ceno';

     interface Result {
        code: number;
     }

     const result1 = await ceno(...).json<Result>();
     // or
     const result2 = await ceno<Result>(...).json();
     //=> { code: 200 }
     ```
     */
    json: <J = T>() => Promise<J>

    /**
     将响应正文作为字符串获取。

     @example
     ```
     import ceno from 'ceno';

     const text = await ceno(...).text();
     ```
     */
    text: () => Promise<string>
} & Promise<CenoResponse<T>>